
package PaqComunicaciones;

import org.omg.CORBA.ORB;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;

/**
 * 
 * 
 */
public class CorbaConexion {

/**
 * <p>Represents ...</p>
 * 
 */
    protected ORB orb;

/**
 * <p>Represents ...</p>
 * 
 */
    protected int puerto;

/**
 * <p>Represents ...</p>
 * 
 */
    protected String host;

/**
 * <p>Represents ...</p>
 * 
 */
    protected POA rootpoa;

/**
 * <p>Represents ...</p>
 * 
 */
    protected NamingContextExt namingContextRef;

/**
 * <p>Does ...</p>
 * 
 * 
 * @param _puerto 
 * @param _host 
 */
    public  CorbaConexion(int _puerto, String _host) {        
        puerto=_puerto;
        host=_host;
        String []args={"-ORBInitialPort",Integer.toString(puerto),"-ORBInitialHost",host};
        
        try {
            // crear e inicializar el ORB
            orb = ORB.init(args, null);
            
            // obtener una referencia a rootpoa y activar POAManager
            rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
            rootpoa.the_POAManager().activate();
                        
            // obtener el contexto de nombrado inicial
            org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
            
            // Usar NamingContextExt que forma parte de la especificación de 
            // Interoperable Naming Service (INS) para apuntar al objeto referencia
            namingContextRef = NamingContextExtHelper.narrow(objRef);
        } catch (Exception e) {
            System.err.println("ERROR: " + e);
            e.printStackTrace(System.out);
        }
    } 

/**
 * <p>Does ...</p>
 * 
 * 
 * @param nombre 
 */
    public void desregistrar(String nombre) {        
        try {
            NameComponent path[] = namingContextRef.to_name(nombre);
            namingContextRef.unbind(path);
        } catch (Exception e) {
            System.err.println("ERROR: " + e);
            e.printStackTrace(System.out);
        }
    } 

/**
 * <p>Does ...</p>
 * 
 */
    public void terminar() {        
        orb.shutdown(false);
    } 
 }
